// CodeGear C++Builder
// Copyright (c) 1995, 2015 by Embarcadero Technologies, Inc.
// All rights reserved

// (DO NOT EDIT: machine generated header) 'ocv.lock.pas' rev: 30.00 (Windows)

#ifndef Ocv_LockHPP
#define Ocv_LockHPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member 
#pragma pack(push,8)
#include <System.hpp>
#include <SysInit.hpp>
#include <Winapi.Windows.hpp>
#include <System.SyncObjs.hpp>

//-- user supplied -----------------------------------------------------------

namespace Ocv
{
namespace Lock
{
//-- forward type declarations -----------------------------------------------
class DELPHICLASS TSRWLock;
class DELPHICLASS TOCVLock;
//-- type declarations -------------------------------------------------------
#pragma pack(push,4)
class PASCALIMPLEMENTATION TSRWLock : public System::TObject
{
	typedef System::TObject inherited;
	
private:
	void *FLock;
	
public:
	__fastcall TSRWLock(void);
	void __fastcall AcquireShared(void);
	void __fastcall ReleaseShared(void);
	void __fastcall AcquireExclusive(void);
	void __fastcall ReleaseExclusive(void);
	bool __fastcall TryAcquireExclusive(void);
	bool __fastcall TryAcquireShared(void);
public:
	/* TObject.Destroy */ inline __fastcall virtual ~TSRWLock(void) { }
	
};

#pragma pack(pop)

typedef TOCVLock* *pOCVLock;

#pragma pack(push,4)
class PASCALIMPLEMENTATION TOCVLock : public System::TObject
{
	typedef System::TObject inherited;
	
private:
	TSRWLock* FLock;
	bool FisLockRead;
	
public:
	__fastcall TOCVLock(void);
	__fastcall virtual ~TOCVLock(void);
	void __fastcall lock(void);
	void __fastcall LockRead(void);
	void __fastcall LockWrite(void);
	void __fastcall UnLock(void);
	void __fastcall Enter(void);
	void __fastcall Leave(void);
};

#pragma pack(pop)

//-- var, const, procedure ---------------------------------------------------
}	/* namespace Lock */
}	/* namespace Ocv */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_OCV_LOCK)
using namespace Ocv::Lock;
#endif
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_OCV)
using namespace Ocv;
#endif
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif	// Ocv_LockHPP
